package br.com.rhinovet.dao.unitario.impl;

import java.util.List;

import org.hibernate.Query;
import org.springframework.stereotype.Repository;

import br.com.rhinovet.dao.generico.DaoGenerico;
import br.com.rhinovet.dao.unitario.contract.ConsultaDaoContract;
import br.com.rhinovet.entidade.Consulta;
import br.com.rhinovet.util.StringUtil;

@Repository("daoConsulta")
public class ConsultaDao extends DaoGenerico<Consulta> implements ConsultaDaoContract {

	private static final long serialVersionUID = 1L;

	@Override
	public List<Consulta> buscarConsultaPorCampos(String nomeProprietario,	String nomeAnimal) throws Exception {
		StringBuilder sqlTotal = new StringBuilder();
		
		sqlTotal.append(" Select consulta from ");
		
		if (StringUtil.textoPreenchido(nomeAnimal)) {
			sqlTotal.append(" Animal animal, ");	
		}
		
		if (StringUtil.textoPreenchido(nomeProprietario)) {
			sqlTotal.append(" Proprietario proprietario, ");	
		}
		
		sqlTotal.append(" Consulta consulta ");
		sqlTotal.append(" where ");
		
		if (StringUtil.textoPreenchido(nomeAnimal)) {
			sqlTotal.append(" consulta.animal.nome like '%"+nomeAnimal+"%' ");
			sqlTotal.append(" and consulta.animal.id = animal.id ");
		}
		
		if (StringUtil.textoPreenchido(nomeProprietario)) {
			sqlTotal.append(" "+andOrNothing(sqlTotal.toString())+" consulta.proprietario.nome like '%"+nomeProprietario+"%' ");
			sqlTotal.append(" and consulta.proprietario.id = proprietario.id ");
		}
		
		Query query = getSession().createQuery(sqlTotal.toString());
		
		@SuppressWarnings("unchecked")
		List<Consulta> listaRetorno = query.list();
		
		return listaRetorno;
	}
	
	@Override
	public List<Consulta> buscarConsultas(boolean somenteAtiva) throws Exception {
		StringBuilder sqlTotal = new StringBuilder();
		sqlTotal.append(" SELECT e from Consulta e");
		
		if (somenteAtiva) {
			sqlTotal.append(" where arquivo is null ");
		}
		
		Query query = getSession().createQuery(sqlTotal.toString());
		@SuppressWarnings("unchecked")
		List<Consulta> listaRetorno =  query.list();
		
		return listaRetorno;
		
	}
	
	public String andOrNothing(String sqlTotal) {
		if (sqlTotal.contains("and")) {
			return  " and ";
		} else {
			return "";
		}
	}


}
